Skip to content

Micro-XRCE-DDS 相关细节和 ROS2 集成

标签
ROS2-humble
microROS
DDS
XRCE-DDS
Zephyr
STM32
embedded
字数
746 字
阅读时间
4 分钟

系统架构

核心组件说明:

  1. Zephyr RTOS:资源受限设备的实时操作系统

  2. Micro-XRCE-DDS Client

    • 运行在嵌入式设备上的轻量级库
    • 实现DDS协议的核心子集
    • 资源要求低(RAM < 10KB)
  3. Micro-XRCE-DDS Agent

    • 运行在Linux/Windows主机上
    • 作为Client与DDS网络之间的桥梁
    • 实现完整DDS功能
  4. ROS 2 DDS中间件

    • 使用Fast DDS/Cyclone DDS等实现
    • 提供分布式通信能力

Agent与Client关系详解

区别对比

特性ClientAgent
定位DDS协议轻量化子集完整DDS代理
运行环境嵌入式设备(MCU)Linux/Windows主机
资源需求RAM: <10KBRAM: >10MB
功能范围序列化/反序列化DDS域管理、QoS策略、类型发现
连接方式UART/UDP/TCP监听Client连接,连接DDS域

协作流程

DDS与ROS2之间的类型转换

话题名称转换机制

ROS2话题名称 → DDS主题名称

ROS2话题:/sensor/temperature
DDS主题:rt/sensor/temperature

转换规则:

  1. 添加前缀 rt/

在Micro-XRCE-DDS Client中的实现:

c
#define ROS_DDS_TOPIC_NAME(topic) "rt" topic

该约定在官方 ROS 2 设计文档中有完整记录。

ROS SubsystemPrefix
ROS Topicsrt
ROS Service Requestrq
ROS Service Responserr
ROS Servicers
ROS Parameterrp
ROS Actionra

下面是官方给出的一些示例

ROS NameDDS Topic
/foort/foo
rostopic:///foo/barrt/foo/bar
/robot1/camera_left/image_rawrt/robot1/camera_left/image_raw

数据类型转换机制

ROS2数据类型 ➔ DDS类型

std_msgs/msg/String 为例:

ROS2消息类型:std_msgs/String
DDS类型:std_msgs::msg::dds_::String_

std_msgsString之间插入::msg::dds_::,并在末尾添加_

如果是service类型,中间就换成插入::srv::dds_::,并在末尾添加_

自定义消息转换流程

Python转换脚本

Zephyr集成实践

Github | discodyer/mirac-dds-app

参考代码仓:

调试命令

  1. 启动Agent

    • 启动Agent并以串口方式连接:
    MicroXRCEAgent serial --dev /dev/ttyACM1 -b 115200 -v6 -d
  2. 查看话题

    • ros2 topic list
    • ros2 topic info /HelloWorldTopic --verbose
    Type: std_msgs/msg/String
    
    Publisher count: 1
    
    Node name: _CREATED_BY_BARE_DDS_APP_
    Node namespace: _CREATED_BY_BARE_DDS_APP_
    Topic type: std_msgs/msg/String
    Endpoint type: PUBLISHER
    GID: 01.0f.df.04.c0.0d.11.cb.00.00.00.00.00.00.01.03.00.00.00.00.00.00.00.00
    QoS profile:
    Reliability: RELIABLE
    History (Depth): UNKNOWN
    Durability: VOLATILE
    Lifespan: Infinite
    Deadline: Infinite
    Liveliness: AUTOMATIC
    Liveliness lease duration: Infinite
    
    Subscription count: 0
    • ros2 topic echo /HelloWorldTopic
    data: 'Hello from Zephyr! Count: 119'
    ---

相关资料

贡献者

页面历史